//#ifdef APP-PLUS
// 国科量子
const quantum = uni.requireNativePlugin('Quantum')
// 文件操作
const Helper = uni.requireNativePlugin('Helper')
// import { Base64 } from 'js-base64';
//#endif
//计算文件大小
function lzGetFileSize(appByts) {
	var mb = 1024 * 1024;
	if (appByts > mb) {
		var bb = appByts / (1024 * 1024);
		bb = bb.toFixed(2);
		return bb + "MB";
	}
	var bk = appByts / 1024;
	bk = bk.toFixed(1);
	return bk + "KB";
}
//计算文件格式传入后缀
function lzGetFileType(suffix) {
	if (suffix == 'jpg' || suffix == 'jpeg' || suffix == "png" || suffix == "bpm" || suffix == "BPM" || suffix == 'PNG' ||
		suffix ==
		'gif' || suffix == 'GIF') {
		return '/static/image/filemanag/image.png'
	} else if (suffix == 'doc' || suffix == 'docx' || suffix == 'DOC' || suffix == 'DOCX') {
		return '/static/image/filemanag/doc.png'
	} else if (suffix == 'xlsx' || suffix == 'xls' || suffix == 'XLSX' || suffix == 'XLS') {
		return '/static/image/filemanag/xlsx.png'
	} else if (suffix == 'txt' || suffix == 'TXT') {
		return '/static/image/filemanag/TXT.png'
	} else if (suffix == 'zip' || suffix == 'rar') {
		return '/static/image/filemanag/zip.png'
	} else if (suffix == 'pdf' || suffix == 'PDF') {
		return '/static/image/filemanag/pdf.png'
	} else if (suffix == 'mp4' || suffix == 'wmv' || suffix == 'avi' || suffix == 'MP4' || suffix == 'WMV' || suffix ==
		'AVI') {
		return '/static/image/filemanag/shipin.png'
	} else if (suffix == 'mp3' || suffix == 'm4a' || suffix == 'wma' || suffix == 'MP3' || suffix == 'M4A' || suffix ==
		'WMA') {
		return '/static/image/filemanag/yinpin.png'
	} else {
		return '/static/image/filemanag/weizhi.png'
	}
}
//判断打开的文件类型
function lzGetTypeSuffix(suffix) {
	let result = ''
	const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'PNG', 'JPG', 'JPEG', 'BMP', 'GIF'];
	const wordList = ['doc', 'xls', 'ppt', 'pdf', 'docx', 'xlsx', 'pptx', 'DOC', 'XLS', 'PPT', 'PDF', 'DOCX', 'XLSX',
		'PPTX', 'txt'
	];
	const videoList = ['mp4', 'wmv', 'avi', 'MP4', 'WMV', 'AVI'];
	const audioList = ['mp3', 'm4a', 'wma', 'MP3', 'M4A', 'WMA'];
	result = imglist.find(item => item === suffix);
	if (result) {
		return 'image';
	}
	result = wordList.find(item => item === suffix);
	if (result) {
		return 'word';
	}
	result = videoList.find(item => item === suffix);
	if (result) {
		return 'video';
	}
	result = audioList.find(item => item === suffix);
	if (result) {
		return 'audio';
	}

}
//文件的写入操作传入要写入文件名，base64
function lzFileWriter(base64,fileName) {
	return new Promise((result,reject)=>{
		// PRIVATE_WWW：本地文件系统常量，Number类型，固定值1。应用运行资源目录，仅本应用可访问。 为了确保应用资源的安全性，此目录只可读。
		// PRIVATE_DOC 本地文件系统常量，Number类型，固定值2。应用私有文档目录，仅本应用可读写。
		plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
			/*
			fs.root是根目录操作对象DirectoryEntry
			getFile(path,flag,succesCB,errorCB)创建或打开文件
				path: ( DOMString ) 必选 要操作文件相对于当前目录的地址
				flag: ( Flags ) 可选 要操作文件或目录的参数 create: (Boolean 类型 )是否创建对象标记 指示如果文件或目录不存在时是否进行创建，默认值为false
				succesCB: ( EntrySuccessCallback ) 可选 创建或打开文件成功的回调函数
				errorCB: ( FileErrorCallback ) 可选 创建或打开文件失败的回调函数
			*/ 
		   // 创建或打开文件
			fs.root.getFile(fileName,{create:true},function(fileEntry) {
				// 获得平台绝对路径
				var fullPath = fileEntry.fullPath;  
				console.log('平台绝对路径',fullPath);
				// 引入安卓原生类
				// var Base64 = plus.android.importClass("android.util.Base64");
				var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
				//如果文件不存在则创建文件，如果文件存在则删除文件后重新创建文件
				var out = new FileOutputStream(fullPath); 
				/**
				 * 此处需要把base64前缀去除，解码后，在写入字节流数组
				 * 去除头部如data:image/jpg;base64,留下base64编码后的字符串
				**/
				let index=base64.indexOf(',')
				let base64Str=base64.slice(index+1,base64.length)
				//base64编码的字符串获取bytes字节流,此bytes为编码的
				let bytes = Helper.Str2Bytes(base64Str,'utf-8').data;
				/**
				 * bytes再去解密，得到原始的字节流bytes
				 * 由于使用njs的android.util.Base64的var bytes = Base64.decode(base64Str,0);解码有大小限制，只能写原始插件Helper
				**/
				bytes=Helper.Base64Decode(bytes,0).data;
				/**
				 * base64解密得到字节流bytes；但是njs有大小限制，解码不能超过100kb具体与手机系统版本有关
				 * Base64.decode(base64Str,0);此方法相当于上面的操作
				 * 【let bytes = Helper.Str2Bytes(base64Str,'utf-8').data;   bytes=Helper.Base64Decode(bytes,0).data;】
				**/
				// var bytes = Base64.decode(base64Str,0);//有大小限制已舍弃此方法
				try{
					out.write(bytes); // byte 数组写入此文件输出流中。
					out.flush(); //刷新写入文件中去。
					out.close(); //关闭此文件输出流并释放与此流有关的所有系统资源。
					result(fullPath)
				}catch(e){  
					console.log(e.message);  
					reject(e.message)
				}
				// 下面的方法只能写入字符串,无法写入字节流bytes
				// fileEntry文件系统中的文件对象，用于管理特定的本地文件
				// fileEntry.file(function(file) {
				// 	/*createWriter获取文件关联的写文件操作对象FileWriter
				// 		abort: 终止文件写入操作
				// 		seek: 定位文件操作位置
				// 		truncate: 按照指定长度截断文件
				// 		write: 向文件中写入数据
				// 	*/
				// 	fileEntry.createWriter(function(FileWriter) {
				// 		FileWriter.write(base64);
				// 		FileWriter.onwriteend=function(res){
				// 			console.log(res.target.fileName);
				// 			result(res.target.fileName)
				// 		}
				// 		FileWriter.onerror=function(error){
				// 			console.log(error);
				// 			reject(error)
				// 		}
				// 	}, function(e) {
				// 		console.log(e);
				// 	});
				// });
			});
		});
	})
}




module.exports = {
	lzGetFileSize,
	lzGetFileType,
	lzGetTypeSuffix,
	lzFileWriter
}
